
package Pruebas.Manolo;

import com.google.common.collect.HashMultiset;
import com.google.common.collect.SortedMultiset;
import com.google.common.collect.TreeMultiset;
import dtkanpr.ANPREngine;
import dtkanpr.Plate;
import dtkanpr.PlateCollection;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.LinkedList;

import java.util.Vector;
import javax.imageio.ImageIO;
/*
import dtkanpr.ANPREngine;
import dtkanpr.Plate;
import dtkanpr.PlateCollection;
*/
/*Esto es la clase de pruebas, está muy guarreada.......En el motiondetectioneffect
 * cuando se produzca una detección se agrega la imagen a la cola del anpr. Por otro
 lado el tstmotiondetection es el que lanza el medialocat por medio de la url 
 * que le pongamos (a pelo, total es para hacer pruebas), y aquí en el principal
 * cuando reconozca una matrícula (o algo similar), lo guarda en un fichero,
 * y al fichero le pone el nombre de la ma´tricula que haya reconocido con extension
 * jpg.
 * Si vais a probarlo, cambiad la ruta del system.load() que hay justo debajo y
 * cambiad la ruta del testmotion para uqe os carge el archivo de video que querais.
 *
 
 
 */

public class PruebaTodo {
    
    public static void crearFicheroJPG(Image imagen, String RutaFichero){
        try {
            
           int           w = imagen.getWidth(null);
           int           h = imagen.getHeight(null);
           BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
           Graphics2D    g2 = bi.createGraphics();
           g2.drawImage(imagen, 0, 0, null);
           g2.dispose();
           String fileType = RutaFichero.substring(RutaFichero.indexOf('.')+1);
           ImageIO.write(bi, fileType, new File(RutaFichero));
        } catch (IOException ex) {
            
        }
    }
    public static void main(String[] args) throws MalformedURLException {
        ANPREngine anpr = new ANPREngine();
        Vector<Image> cola = new Vector<Image>();
        int cont = 0;
        String extension = ".jpg";
        String nombre = "img";
        TestMotionDetection_1 video = new TestMotionDetection_1(cola);
        System.load("D:/Archivos de Programa/DTK Software/DTK ANPR SDK/Bin/DTKANPR.dll");
        anpr.AddLicenseKey("7D667396DFFF9F595FBB9150AE2A0CB32BBB14BDA36029F54DC94B14904A4BB4C575E679FE2949585A6E638E9765E7E05F8A6F36B6FC8B7632E43326B95297F7390364527AEE9F487B4DB928D13C5AF8B2BC22584E");
        long nRes = anpr.Init(false);
        
        PlateCollection plates;
        anpr.SetCountryCode("ES");
        anpr.SetMaxCharHeight(80);
        anpr.SetMinimumCharHeight(3);
        FreqSortMultiSet<String> set = FreqSortMultiSet.create(false);
        FreqSortMultiSet<String> aux;
        int desc=0;          
        boolean centinela=false;
        while(true){
         while (!cola.isEmpty()) {  
            if (!cola.isEmpty()) {
                if (nRes == 0) {
                    try {
                        Image img = cola.get(0);
                        cola.remove(0);
                        plates = anpr.ReadFromImage((BufferedImage) img, 0);
                        if (plates != null) {
                            long count = plates.getCount();
                            if (count > 0) {
                                Plate plate = plates.getPlate(0);
                                if (plate != null && plate.text.length()>=7 && plate.text.length()<=8){
                                    String plateText = plate.text;
//                                    System.out.println("License plate text: "
//                                            + plateText);
                                    set.add(plateText);
                                    //System.out.println(plateText);
                                    if(set.count(set.primero())>=4) {
                                        if(centinela==false){
                                            centinela=true;
                                            PruebaTodo.crearFicheroJPG(img, "C:\\"+cont+++".jpeg");
                                            System.out.println("Actualizo matriculas es: "+ set.primero());
                                            System.out.println("\n¡¡ Abrir barrera¡¡\n\n\n");
                                        }
                                    }
                                    if(LevenshteinDistance.computeLevenshteinDistance(plateText, set.primero())>3){
                                            centinela=false;
                                            set.clear();
                                            System.out.println("\n\nMATRICULA NUEVA TRONCO____________");
                                                
                                            set.add(plateText);
                                    }
                                   // System.out.println("Este es el primero:  "+set.descendingMultiset().firstEntry().toString());
                                }
                            }                           
                        }
                    } catch (Exception e) {
                        System.out.println(e.getMessage());
                    }
                }
            }
            
        }
    }
    
    }
}

